home *** CD-ROM | disk | FTP | other *** search
- -------------------------------------------------------------------------------
- *** THE DIGITAL EXCESS & HITMEN 4-PLAYER JOYSTICK ADAPTER ***
-
- OR "4 PLAYERS WITH EASE - HOW SMART PROGRAMMING CAN SUBSTITUTE HARDWARE"
- -------------------------------------------------------------------------------
-
- CONTENTS:
- ---------
-
- - CHANGES LOG
- - PRELUDE
- - HOW IT WORKS
- - PARTS LIST
- - SHEMATICS
- - SAMPLE CODE
- - KNOWN PROBLEMS
- - LAST WORDS
- - CREDITS
- - CONTACT ADRESS
-
-
- CHANGES:
- --------
-
- V1.2: - SAMPLE CODE CLEANUP
-
- V1.1: - SAMPLE CODE UPDATED
- - ADDED FLOW-OF-DATA TO THE SHEMATICS FOR THOSE WHO ARE INTERISTED
- - ADDED COMMENT ON KNOWN PROBLEMS
-
- V1.2 PRELUDE
- ------------
-
- CLEANED UP THE SAMPLE CODE, FIXING A MINOR BUG.
-
- V1.1 PRELUDE
- ------------
-
- HOWDY! CHEERS FOR THE COMMENTS AND SUGGESTIONS I GOT IN MAIL. THIS IS WHAT
- ACTUALLY MADE ME PUTTING OUT THIS UPDATE - THE ADDITIONAL INFO COULD BE
- INTERISTING FOR YOU ASWELL.
-
- V1.0 PRELUDE
- ------------
-
- AT MEKKA SYMPOSIUM 99 WE TOOK A LOOK AT THE 4-PLAYER ADAPTER THAT IS SUPPORTED
- BY THE GAME "BOMB MANIA". THOMAS AND BJOERN HAD STARTED WORKING ON THEIR
- PROJECT "DETONATORS 2" A WHILE AGO AND THE MULTI-PLAYER ABILITY WAS PUT ON THE
- "MUST HAVE" LIST. HOWEVER, AFTER WE CRACKED UP THE THING WE NOTICED THAT THIS
- PARTICULAR ADAPTER NEEDED SOME ELECTRONIC COMPONENTS TO WORK AND BECAUSE OF
- THAT IT WAS NOT REALLY SUITABLE FOR THE AVERAGE SCENER TO BUILT ON HIS OWN. WE
- ALMOST FORGOT ABOUT THE IDEA OF CREATING A 4 PLAYERS THINGY, UNTIL WE MET AGAIN
- AT THE END OF NOVEMBER 99. HAVING NO DECENT DOCUMENTATION EXCEPT SOME SCANNED
- C64 SHEMATICS AND SOME IO-MAP IT WAS QUITE A HAZZLE TO KNOCK IT UP SINCE WE HAD
- TO DISCOVER A FEW (PROBABLY WELL KNOWN) THINGS OURSELVES, BUT WE FINALLY WORKED
- IT OUT. HERE IT IS, EASY TO BUILT FOR EVERYONE - AND DOCUMENTED ASWELL.
-
- TAKE THIS AS OUR CHRISTMAS PRESENT FOR YOU - SINCE IT IS CHRISTMAS ANYWAY,
- SPEND YOUR TIME ON SOMETHING USEFUL AND DO SOME CHRISTMASSY HANDICRAFT WORK.
-
- HOW IT WORKS
- ------------
-
- TO INTERFACE 2 ADDITIONAL JOYSTICKS WE HAD TO FIND 10 ADDITIONAL INPUT-LINES
- ON THE C64. SINCE WE WANTED TO CREATE SOMETHING THAT IS BOTH CHEAP AND COULD
- BE BUILT BY PEOPLE WITH VERY LITTLE (IF NOT NONE) SOLDERING EXPERIENCE, WE
- LIMITED OURSELVES TO JUST USING PLUGS AND WIRES. WE LOOKED AT THE USER-PORT
- AND FOUND 8 LINES AT THE FIRST GLANCE - PORT B OF CIA 2 - WHICH WERE USED TO
- CONNECT THE 4 DIRECTIONAL LINES OF EACH JOYSTICK. FINDING 2 MORE LINES FOR
- THE BUTTONS WAS A LITTLE MORE TRICKY. IF YOU LOOK CLOSER AT THE USER-PORT,
- YOU WILL NOTICE THAT BIT 2 OF CIA 2 PORT A IS CONNECTED TO IT ASWELL, SO
- THERE IS JUST ONE OTHER LINE LEFT TO FIND - WHICH TURNED OUT TO BE THE MOST
- CHALLENGING PART OF IT ALL. WHAT WE DID IS ABUSING THE SYNCHRONOUS SERIAL
- DATA REGISTER OF CIA 2, WHICH IS ALSO AVAILABLE AT THE USER-PORT. TO MAKE
- THIS WORK WE HAD TO LET CIA 1 OUTPUT A COUNTER-SIGNAL AT THE CORRESPONDING
- USER-PORT PIN AND WE FED THAT SIGNAL BACK INTO CIA 2 SERIAL-COUNTER. NOW BY
- USING THE MAXIMUM COUNTER-SPEED POSSIBLE, WE COULD USE THE SYNCHRONOUS
- SERIAL REGISTER OF CIA 2 AS ANOTHER 'DIGITAL' INPUT LINE AND BINGO - THERE
- WE ARE....
-
- PARTS LIST
- ----------
-
- AMOUNT WHAT? WE FOUND IT AT COSTS
-
- 1 USER PORT PLUG (CONRAD ELECTRONIC 742201) 3.95 DM
- 2 SUB-D 9PIN PLUG, MALE (CONRAD ELECTRONIC 742066) 0.85 DM EACH
- SOME WIRES RIP OFF SOMEWHERE ?
- CASE (OPTIONAL) OLD CARTRIDGE ?
-
- TOTAL COSTS: 5.65 DM
-
- ANYONE SHOULD BE ABLE TO ASSEMBLE EVERYTHING IN LESS THAN AN HOUR.
-
- THE SHEMATICS:
- --------------
-
- DON'T PANIC! :P THE -->-- / --<-- SYMBOLS DO JUST MARK THE DIRECTION THE DATA
- IS FLOWING! =)
-
- USER PORT JOYSTICKS
- --------- ---------
-
- GND 1 ---------------+--- 8 JOY 3 GND
- CNT1 4 ->-+ +--- 8 JOY 4 GND
- CNT2 6 -<-+
- SP2 7 ----------<-------- 6 JOY 4 BUTTON
- PB0 C ----------<-------- 1 JOY 3 A0
- PB1 D ----------<-------- 2 JOY 3 A1
- PB2 E ----------<-------- 3 JOY 3 A2
- PB3 F ----------<-------- 4 JOY 3 A3
- PB4 H ----------<-------- 1 JOY 4 A0
- PB5 J ----------<-------- 2 JOY 4 A1
- PB6 K ----------<-------- 3 JOY 4 A2
- PB7 L ----------<-------- 4 JOY 4 A3
- PA2 M ----------<-------- 6 JOY 3 BUTTON
-
- NOTE: GND IS CONNECTED TO BOTH JOY3/JOY4 GND - ASWELL CNT1 AND CNT2 ARE BRIDGED
- (SHAME THERE ARE NO DECENT GFX CHARACTERS IN ASCII :P)
-
- USER PORT PLUG (BACK VIEW - SOLDERING SIDE)
- -------------------------------------------
-
- (TOP)
- +----+-----------------------------------------------+----+
- | | 1 2 3 4 5 6 7 8 9 10 11 12 | |
- | ++ | | ++ |
- | ++ | | ++ |
- | | A B C D E F H J K L M N | |
- +----+-----------------------------------------------+----+
- (BOTTOM)
-
- JOYSTICK PORT PLUG (BACK VIEW - SOLDERING SIDE)
- -----------------------------------------------
-
- (TOP)
- ---\-----------------------/---
- | \ 5 4 3 2 1 / |
- | * \ / * |
- | \ 9 8 7 6 / |
- -------\---------------/-------
- (BOTTOM)
-
- SAMPLE CODE IN TURBO-ASS SYNTAX (SKIP THIS IF YOU CAN'T CODE *GRIN*)
- --------------------------------------------------------------------
-
- ;---------------------------------------
- ;4 PLAYER ADAPTER SAMPLE CODE BY GPZ/HIT
- ;---------------------------------------
-
- JOY3REG = $02 ; EXAMPLE JOY-REGS
- JOY4REG = $03
-
- BTEMP = $04 ; TEMP FOR DISPLAY
-
- ;---------------------------------------
- ; MAIN
- ;---------------------------------------
-
- *= $1000
-
- ;
- ; USUAL IRQ SETUP
- ;
-
- SEI
- LDA #>IRQ
- STA $0315
- LDA #<IRQ
- STA $0314
- LDA #$1B
- STA $D011
- LDA #$7F
- STA $DC0D
- LDA #$FF
- STA $D012
- LDA #$01
- STA $D01A
-
- ;
- ; PRINT INFO
- ;
-
- LDX #$00
- LOOP .VAR *
- LDA SCREEN,X
- JSR $FFD2
- INX
- CPX #22
- BNE LOOP
-
- JSR SETUP ; CIA SETUP FOR ADAPTER
-
- CLI
-
- JMP *
-
- ;---------------------------------------
- ; INTERUPT CALLS OTHER ROUTINES
- ;---------------------------------------
- IRQ
-
- INC $D020
-
- JSR READ ; READ ADAPTER (TAKES ABOUT 2 RASTERLINES)
-
- INC $D020
-
- LDX #(40*1)+4
- LDA $DC00
- JSR DISPLAYBITS
-
- LDX #(40*2)+4
- LDA $DC01
- JSR DISPLAYBITS
-
- LDX #(40*3)+4
- LDA JOY3REG
- JSR DISPLAYBITS
-
- LDX #(40*4)+4
- LDA JOY4REG
- JSR DISPLAYBITS
-
- LDA #$00
- STA $D020
-
- INC $D019
- JMP $FEBC
-
- ;---------------------------------------
- ; DISPLAYS 5 LOWEST BITS OF JOYSTICK-REG
- ;---------------------------------------
- DISPLAYBITS
-
- ROL A
- ROL A
- ROL A
-
- STA BTEMP
-
- LDY #$00
- LOOP .VAR *
-
- ROL BTEMP
- BCC SKIP1
-
- LDA #"-"
- JMP SKIP2
- SKIP1
- LDA #"*"
- SKIP2
- STA $0400,X
-
- INX
- INY
- CPY #$05
- BNE LOOP
-
- RTS
-
- ;---------------------------------------
- SCREEN
- .TEXT "{CLR/HOME}JOY BRLDU{RETURN}"
- .TEXT " 1{RETURN}"
- .TEXT " 2{RETURN}"
- .TEXT " 3{RETURN}"
- .TEXT " 4{RETURN}"
-
- ;---------------------------------------
-
- ;---------------------------------------
- READ
- ;---------------------------------------
- ; READS ADAPTER AND COMPOSES THE
- ; ADDITIONAL VIRTUAL JOYSTICK-REGISTERS
- ;---------------------------------------
- ;THIS CODE DEMONSTRATES HOW TO READ THE
- ;ADDITIONAL 2 JOYSTICKS AND HOW TO COM-
- ;POSE 2 'VIRTUAL' JOYSTICK-REGISTERS
- ;THAT CAN BE PROCESSED EXACTLY LIKE THE
- ;USUAL ($DC00/$DC01) ONES.
- ;---------------------------------------
- ;
- ; SAVE CIA 2 REGISTERS
- ;
-
- LDA $DD00
- STA CIASAVE1+1
- LDA $DD02
- STA CIASAVE2+1
-
- ;
- ; READ DIRECTIONS JOY 3+JOY 4
- ;
-
- LDA $DD01 ;READ CIA 2 PORT B
- STA TEMP+1
-
- AND #$0F
- STA JOY3REG
-
- TEMP LDA #$00
- LSR A
- LSR A
- LSR A
- LSR A
- STA JOY4REG
-
- ;
- ; READ BUTTON JOY 3
- ;
-
- LDA $DD02 ;CIA 2 PORT A
- AND #%11111011 ;DATA DIRECTION
- STA $DD02 ;=> BIT 2 INPUT
-
- LDA $DD00 ;READ CIA 2 P.A
- AND #%00000100 ;CHECK BIT 2
- ASL A
- ASL A
- ORA JOY3REG
- STA JOY3REG
-
- ;
- ; READ BUTTON JOY 4
- ;
-
- LDA #$FF ;SERIAL DATA REGISTER
- STA $DC0C;=> WRITING $FF CAUSES
- ;CIA TO OUTPUT SOME
- ;COUNT SIGNALS AT CNT1
-
- LDA $DD0C ;READ CIA 2 SERIAL IN
- BEQ FIRE ;BUTTON PRESS IF ZERO
-
- LDA JOY4REG
- ORA #%00010000
- STA JOY4REG
-
- FIRE
-
- ;
- ; RESTORE CIA 2 REGISTERS
- ;
-
- CIASAVE1 LDA #$00
- STA $DD00
- CIASAVE2 LDA #$00
- STA $DD02
-
- RTS
-
- ;---------------------------------------
- SETUP
- ;---------------------------------------
- ;WARNING: DO NOT MESS AROUND WITH THIS
- ; UNLESS YOU REALLY KNOW WHAT
- ; YOU ARE DOING! WRONG CIA SETUP
- ; MAY TOAST YOUR CIA'S !
- ;---------------------------------------
-
- ;
- ; CIA 2 SETUP
- ;
-
- LDA #$00 ; PORT B DIRECTION
- STA $DD03 ; => INPUT
-
- LDA #$01
- STA $DD04 ; TIMER A LOWBYTE
- LDA #$00
- STA $DD05 ; TIMER A HIGHBYTE
-
- LDA #%00010001
- STA $DD0E ; CONTROL REGISTER A
- ; TIMER: START
- ; CONTINOUS
- ; FORCED LOAD
- ; SERIAL PORT: INPUT
-
- ;
- ; CIA 1 SETUP
- ;
-
- LDA #$01
- STA $DC04 ; TIMER A LOWBYTE
- LDA #$00
- STA $DC05 ; TIMER A HIGHBYTE
-
- LDA #%01010001
- STA $DC0E ; CONTROL REGISTER A
- ; TIMER: START
- ; CONTINOUS
- ; FORCED LOAD
- ; SERIAL PORT: OUTPUT
-
- LDA #$FF ;SERIAL DATA REGISTER
- STA $DC0C;=> WRITING $FF CAUSES
- ;CIA TO OUTPUT SOME
- ;COUNT SIGNALS AT CNT1
- RTS
-
-
- ;------------------------------------------------------------------------------
-
- KNOWN PROBLEMS:
- ---------------
-
- THERE IS, HOWEVER, SOME MINOR PROBLEM WITH PROGRAMMING A GAME THAT SUPPORTS THE
- ADAPTER. IT IS, THAT IF THE ADAPTER IS NOT CONNECTED TO THE C64, THE CODE AS
- SHOWN HERE WILL ALWAYS REPORT FIRE ON JOY4 PRESSED. SO IF YOU WANT YOUR GAME TO
- WORK WITHOUT THE ADAPTER ASWELL, YOU NEED A USER-INTERACTIVE OPTION TO SWITCH
- THE ADAPTER-READING CODE OFF. (OR IGNORE WHAT IT REPORTS RESPECTIVLY. ALSO,
- YOU SHOULDNT USE FIRE ON JOY 4 IN MENUS OR SUCH THINGS LIKE 'START GAME' IF
- THERE ISNT A WAY TO SWITCH THE ADAPTER OFF BEFORE (THE GAME WOULD BE UNUSEABLE
- WITHOUT THE ADAPTER).
-
- LAST WORDS:
- -----------
-
- WITH THIS THING WE HOPE TO MOTIVATE SOME MORE PEOPLE TO DEVELOP MULTI-PLAYER
- CAPABLE GAMES FOR OUR BELOVED MACHINE. SEVERAL GAME CONCEPTS DO JUST CRY FOR
- AN EXPANSION LIKE THIS! IT'S UP TO YOU NOW... MAY IT BE PATCHING EXISTING
- GAMES (LIKE ALL THOSE ROUND-BASED SPORT GAMES FOR EXAMPLE) OR CREATING
- ASTONISHING NEW ONES FROM SCRATCH.
-
- "IMAGINATION IS MORE IMPORTANT THAN KNOWLEDGE." (ALBERT EINSTEIN)
-
- CREDITS:
- --------
-
- GROEPAZ/HITMEN : HARDWARE SPANKING, THIS DOCUMENT
- THOMAS KONCINA/DIGITAL EXCESS : CODING, MENTAL SUPPORT
- BJOERN ODENDAHL/DIGITAL EXCESS : TEST APPLICATION GRAPHICS, RELEASE PACKAGING
-
- CONTACT:
- --------
-
- GROEPAZ/HITMEN : GROEPAZ@GMX.NET
- BJOERN ODENDAHL/DIGITAL EXCESS : SEVEN@CRYPT.RUHR.DE
-